跳到主要内容

DLL 注入的方法

创建远程线程(CreateRemoteThread)

这种方法通过 Windows API 函数 CreateRemoteThread 在目标进程中创建一个新线程,该线程加载指定的 DLL。

步骤:

  1. 打开目标进程(OpenProcess)。
  2. 分配内存以存储 DLL 路径(VirtualAllocEx)。
  3. 将 DLL 路径写入目标进程的内存(WriteProcessMemory)。
  4. 使用 LoadLibrary 函数地址作为线程启动例程,创建远程线程(CreateRemoteThread)。

挂钩导入表(IAT Hooking)

这种方法修改目标进程的导入地址表(Import Address Table, IAT),使其指向恶意 DLL 的函数。

步骤:

  1. 打开目标进程。
  2. 解析目标进程的 PE 文件结构,找到 IAT。
  3. 修改 IAT,替换函数指针为恶意 DLL 中的函数。

APC 注入(Asynchronous Procedure Call Injection)

这种方法利用 APC 机制,将 DLL 注入到目标进程的线程中。

步骤:

  1. 打开目标进程并获取目标线程句柄。
  2. 分配内存以存储 DLL 路径。
  3. 将 DLL 路径写入目标进程的内存。
  4. 使用 QueueUserAPC 函数,将 LoadLibrary 调用排入目标线程的 APC 队列。

DLL 劫持(DLL Hijacking)

这种方法利用应用程序搜索 DLL 的方式,通过放置恶意 DLL 到应用程序目录或系统目录,使应用程序加载恶意 DLL。

步骤:

  1. 了解目标应用程序加载 DLL 的顺序。
  2. 创建一个与目标 DLL 同名的恶意 DLL。
  3. 将恶意 DLL 放置在目标应用程序的目录中,使其在搜索路径中优先被加载。

反射式 DLL 注入(Reflective DLL Injection)

这种方法不使用 Windows 的 API 函数 LoadLibrary,而是在目标进程内手动加载 DLL。

步骤:

  1. 将 DLL 的代码和数据直接注入到目标进程的内存中。
  2. 手动解析和加载 DLL 的导入表、重定位表等。
  3. 执行 DLL 的入口点函数。

进程挂钩(Process Hollowing)

这种方法创建一个新的进程,将其原始代码段替换为恶意代码段。

步骤:

  1. 创建一个新的挂起进程(CreateProcess,带 CREATE_SUSPENDED 标志)。
  2. 在新的进程中分配内存并写入恶意代码。
  3. 修改进程的入口点,使其执行恶意代码。
  4. 恢复进程运行(ResumeThread)。